package vista;

import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.WindowListener;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import java.io.File;
import java.beans.PropertyChangeListener;

public class InterfazGraficaProducto 
{
	private JButton btnGuardar,btnModificar,btnEliminar,btnCancelar,btnSalir,btnBuscarCategoria;
	private JTextField txtCodProducto,txtNombreCorto, txtNombreLargo,txtPorcGanancia,txtCategoria;
	private  JScrollPane scroll;
	private JTable tabla;
	private JLabel lblTotalPrecio;
	private Ventana ventana;
	
	public InterfazGraficaProducto()
	{
		ImageIcon imgGuardar= new ImageIcon(getClass().getResource("imagenes" + File.separator + "guardar.png"));
	    ImageIcon imgModificar= new ImageIcon(getClass().getResource("imagenes" + File.separator + "modificar.png"));
	    ImageIcon imgEliminar= new ImageIcon(getClass().getResource("imagenes" + File.separator + "eliminar.png"));
	    ImageIcon imgCancelar= new ImageIcon(getClass().getResource("imagenes" + File.separator + "cancelar.png"));
	    ImageIcon imgSalir= new ImageIcon(getClass().getResource("imagenes" + File.separator + "salir.png"));	
	
	    FabricaAbstractaVentana fabricaVentanas= FabricaAbstractaVentana.getInstance();
		ventana= fabricaVentanas.crearVentanaIndependiente();
		
		ventana.asignarTitulo("Producto");
		
		JLabel lblTitulo= new JLabel("PRODUCTOS");
	    JLabel lblCodProducto= new JLabel("Codigo:");
	    JLabel lblNombreCorto= new JLabel("Nombre corto:");
	    JLabel lblNombreLargo= new JLabel("Nombre Largo:");
	    JLabel lblCategoria= new JLabel("Categoria :");
	    JLabel lblPorcGanancia= new JLabel("Porc Ganancia:");
	    JLabel lblIngredientes= new JLabel("Ingredientes del Producto");
	    JLabel lblTotal= new JLabel("TOTAL BSF:");
	    lblTotalPrecio= new JLabel("0.0");   
	     
	    JToolBar barraHerramientas= new JToolBar();
	    barraHerramientas.setFloatable(false);
	    barraHerramientas.setOpaque(false);
	    barraHerramientas.setBorderPainted(false);
	     
	    
	    tabla= new JTable();
        scroll = new JScrollPane(tabla,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
	     
	    btnBuscarCategoria= new JButton("...");
        btnGuardar= new JButton("GUARDAR",imgGuardar);
	    btnModificar= new JButton("MODIFICAR",imgModificar);
	    btnEliminar= new JButton("ELIMINAR",imgEliminar);
	    btnCancelar= new JButton("CANCELAR",imgCancelar);
	    btnSalir= new JButton("SALIR",imgSalir);
	    
	    btnBuscarCategoria.setActionCommand("BuscarCategoria");
	    
	    txtCodProducto = new JTextField();
	    txtNombreCorto= new JTextField();
	    txtNombreLargo= new JTextField();
	    txtPorcGanancia= new JTextField();
	    txtCategoria= new JTextField();
	     
	    txtCodProducto.setName("txtCodProducto");
	    txtNombreCorto.setName("txtNombreCorto");
	    txtNombreLargo.setName("txtNombreLargo");
	    txtPorcGanancia.setName("txtPorcGanancia");
        txtCategoria.setName("txtCategoria");
        
        txtCategoria.setEnabled(false);
	    
	    btnGuardar.setVerticalTextPosition(SwingConstants.BOTTOM);
	    btnGuardar.setHorizontalTextPosition(SwingConstants.CENTER);
	    btnGuardar.setOpaque(false);
	    btnGuardar.setBorderPainted(false);
	     
	    btnModificar.setVerticalTextPosition(SwingConstants.BOTTOM);
	    btnModificar.setHorizontalTextPosition(SwingConstants.CENTER);
	    btnModificar.setOpaque(false);
	    btnModificar.setBorderPainted(false);

	    btnEliminar.setVerticalTextPosition(SwingConstants.BOTTOM);
	    btnEliminar.setHorizontalTextPosition(SwingConstants.CENTER);
	    btnEliminar.setOpaque(false);
	    btnEliminar.setBorderPainted(false);

	    btnCancelar.setVerticalTextPosition(SwingConstants.BOTTOM);
	    btnCancelar.setHorizontalTextPosition(SwingConstants.CENTER);
	    btnCancelar.setOpaque(false);
	    btnCancelar.setBorderPainted(false);
	        
	    btnSalir.setVerticalTextPosition(SwingConstants.BOTTOM);
	    btnSalir.setHorizontalTextPosition(SwingConstants.CENTER);
	    btnSalir.setOpaque(false);
	    btnSalir.setBorderPainted(false);
	     
	    barraHerramientas.add(btnGuardar);
	    barraHerramientas.addSeparator();
	    barraHerramientas.addSeparator();
	    barraHerramientas.add(btnModificar);
	    barraHerramientas.addSeparator();
	    barraHerramientas.addSeparator();
	    barraHerramientas.add(btnEliminar);
	    barraHerramientas.addSeparator();
	    barraHerramientas.addSeparator();
	    barraHerramientas.add(btnCancelar);
	    barraHerramientas.addSeparator();
	    barraHerramientas.addSeparator();
	    barraHerramientas.add(btnSalir);
	     
	    lblTitulo.setFont(new Font(Font.SERIF,Font.BOLD,20));
	    lblCodProducto.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblNombreCorto.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblNombreLargo.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblCategoria.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblPorcGanancia.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblIngredientes.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblTotal.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    lblTotalPrecio.setFont(new Font(Font.DIALOG,Font.BOLD,15));
	    
	    
	    ventana.agregarComponente(lblTitulo,255, 10,180, 30);
	    ventana.agregarComponente(lblCodProducto,20, 60, 150, 20);
	    ventana.agregarComponente(lblNombreCorto,290, 60, 150, 20);
	    ventana.agregarComponente(lblNombreLargo,20, 100, 150, 20); 
	    ventana.agregarComponente(lblCategoria,20, 145, 150, 20);      
	    ventana.agregarComponente(lblPorcGanancia,370, 100, 150, 20);
	    ventana.agregarComponente(lblIngredientes,220, 190, 200, 20); 
	    ventana.agregarComponente(lblTotal,240, 360, 130, 20);
	    ventana.agregarComponente(lblTotalPrecio,340, 360, 100, 20);
	    ventana.agregarComponente(txtCodProducto,100, 60, 150, 25); 
	    ventana.agregarComponente(txtNombreCorto,400, 60, 200, 25);
	    ventana.agregarComponente(txtNombreLargo,140, 100, 210, 25);
	    ventana.agregarComponente(txtPorcGanancia,490, 100, 110, 25);  
	    ventana.agregarComponente(txtCategoria,120,140, 150, 25);
	    ventana.agregarComponente(btnBuscarCategoria, 280, 143, 20, 20);
	    ventana.agregarComponente(barraHerramientas,80, 410, 500, 90);
        ventana.agregarComponente(scroll,20, 220,580, 120);
     
        
        ventana.asignarTamanio(640,540);
	}
	
	public void addListener(ActionListener escuchador)
    {
    	btnGuardar.addActionListener(escuchador);
        btnEliminar.addActionListener(escuchador);
        btnModificar.addActionListener(escuchador);
        btnCancelar.addActionListener(escuchador);
        btnSalir.addActionListener(escuchador);
        btnBuscarCategoria.addActionListener(escuchador);
    }
    
    public void addListener(WindowListener escuchador)
	{
	   ventana.addListener(escuchador);
	}
    
	 
	 public void addListener(FocusListener escuchador)
	 {
		 txtCodProducto.addFocusListener(escuchador);
	  }
	 
	 
	 
	 public void addListener(KeyListener escuchador)
	 {
		 txtCodProducto.addKeyListener(escuchador);
		 txtNombreCorto.addKeyListener(escuchador);
		 txtNombreLargo.addKeyListener(escuchador);
		 txtPorcGanancia.addKeyListener(escuchador);
		 
		  
	 }
	 
	 public void addListener(PropertyChangeListener escuchador)
	 {
		 txtCategoria.getAccessibleContext().addPropertyChangeListener(escuchador);
		 
	 }
	 
	 
	 public void asignarDatosTabla(TableModel modeloTabla)
	 {
		 tabla.setModel(modeloTabla);
	 }
	 
	 public TableColumnModel getTableColumnModel()
	 {
		 return tabla.getColumnModel();
	 }
	 
	 public void asignarPrecioTotal(double total)
	 {
		lblTotalPrecio.setText(String.valueOf(total)); 
	 }
	 
	 public double getPrecioTotal()
	 {
		return Double.parseDouble(lblTotalPrecio.getText()); 
	 }
	 
	 public float getPorcGanancia()
	 {
		 float valor=0.0f;
		 
		 try
		 {
		    valor= Float.parseFloat((txtPorcGanancia.getText()));	 
		 }
		 catch(NumberFormatException e)
		 {
			 valor=0.0f;
		 }
		 
		 return valor;
	 }
	 public void asignarValoresEdicionTabla(int row,int col)
	 {
		  if (tabla.isEditing())
		  {
		    tabla.setValueAt(tabla.getCellEditor().getCellEditorValue(),row, col);
		  }
        
	 }
	 
	 public void actualizarInfo(String codProducto,String nombreCorto,String nombreLargo,float porc)
	 {
		 txtCodProducto.setText(codProducto);
		 txtNombreCorto.setText(nombreCorto);
		 txtNombreLargo.setText(nombreLargo);
		 txtPorcGanancia.setText(String.valueOf(porc));
		 
		
	 }
	 
	
	 
	  public void habilitarBotonActualizar(String boton)
	  {
	    	if (btnGuardar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnGuardar.setEnabled(true);
	    	else if (btnEliminar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnEliminar.setEnabled(true);
	    	else if (btnModificar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnModificar.setEnabled(true);
	    	else if (btnCancelar.getActionCommand().equalsIgnoreCase(boton))
	     	   btnCancelar.setEnabled(true);
	    	
	  }
	  
	  public void deshabilitarBotonActualizar(String boton)
	  {
	    	if (btnGuardar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnGuardar.setEnabled(false);
	    	else if (btnEliminar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnEliminar.setEnabled(false);
	    	else if (btnModificar.getActionCommand().equalsIgnoreCase(boton))
	    	   btnModificar.setEnabled(false);
	    	else if (btnCancelar.getActionCommand().equalsIgnoreCase(boton))
	     	   btnCancelar.setEnabled(false);
	    	
	  }
	 
	  
	  public String getCodProducto()
	  {
		  return txtCodProducto.getText();
	  }
	  
	  public String getNombreCorto()
	  {
		  return txtNombreCorto.getText();
	  }
	  
	  public String getNombreLargo()
	  {
		  return txtNombreLargo.getText();
	  }
	  
	  
	  public String getCategoria()
	  {
		  return txtCategoria.getText();
	  }
	  
	  public void limpiarTextos()
	  {
	      txtNombreCorto.setText("");
		  txtNombreLargo.setText("");
		  txtCategoria.setText("");
		  txtPorcGanancia.setText(String.valueOf(0.0f)); 
	  }
	  
	  public void asignarFocoCodigo()
	  {
		  txtCodProducto.requestFocus();
	  }
    
    
    
    public void visualizarVentana()
	{
		ventana.visualizar();
	}
    
    public void descargarMemoria()
	{
		ventana.descargarMemoria();
	}
    
    public void asignarCategoria(String categoria)
    {
    	txtCategoria.setText(categoria);
    }
    
    public VentanaIndependiente getVentana()
    {
    	return (VentanaIndependiente) ventana;
    }

}
